home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / os-probes / mounted / 20microsoft < prev    next >
Text File  |  2008-08-25  |  2KB  |  68 lines

  1. #!/bin/sh
  2. # Detects all Microsoft OSes on a collection of partitions.
  3.  
  4. . /usr/share/os-prober/common.sh
  5.  
  6. partition=$1
  7. mpoint=$2
  8. type=$3
  9.  
  10. # Weed out stuff that doesn't apply to us
  11. case "$type" in
  12.     ntfs|ntfs-3g) debug "$1 is a NTFS partition" ;;
  13.     vfat) debug "$1 is a FAT32 partition" ;;
  14.     msdos) debug "$1 is a FAT16 partition" ;;
  15.     fuse|fuseblk) debug "$1 is a FUSE partition" ;; # might be ntfs-3g
  16.     *) debug "$1 is not a MS partition: exiting"; exit 1 ;;
  17. esac
  18.  
  19. # Vista/Longhorn
  20. if item_in_dir -q bootmgr "$2" && item_in_dir -q boot "$2" &&
  21.    item_in_dir -q bcd $2/$(item_in_dir boot "$2"); then
  22.     long="Windows Vista/Longhorn (loader)"
  23.     short=Windows
  24. # 2000/XP/NT4.0
  25. elif item_in_dir -q ntldr "$2" && item_in_dir -q ntdetect.com "$2"; then
  26.     long="Windows NT/2000/XP"
  27.     short=Windows
  28.     ini=$(item_in_dir boot.ini "$2")
  29.     if [ -n "$ini" ]; then
  30.         multicount="$(grep -e "^multi" "$2/$ini" | wc -l)"
  31.         scsicount="$(grep -e "^scsi" "$2/$ini" | wc -l)"
  32.         msoscount="$(expr ${multicount} + ${scsicount})"
  33.         if [ $msoscount -eq 1 ]; then
  34.             # We need to remove a Carriage Return at the end of
  35.             # the line...
  36.             defaultmspart="$(grep -e "^default=" "$2/$ini" | cut -d '=' -f2 | tr -d '\r')"
  37.             # Escape any backslashes in defaultmspart
  38.             grepexp="^$(echo $defaultmspart | sed -e 's/\\/\\\\/')="
  39.             # Colons not allowed; replace by spaces
  40.             # Accented characters (non UTF-8) cause debconf to
  41.             # hang, so we fall back to the default if the name
  42.             # contains any weird characters.
  43.             long="$(grep -e "$grepexp" "$2/$ini" | cut -d '"' -f2 | \
  44.                 tr ':' ' ' | grep -v '[^a-zA-Z0-9 &()/_-]')"
  45.             if [ -z "$long" ]; then
  46.                 long="Windows NT/2000/XP"
  47.             fi
  48.         else
  49.             long="Windows NT/2000/XP (loader)"
  50.         fi
  51.     fi
  52. # MS-DOS
  53. elif [ -d "$(item_in_dir dos $2)" ]; then
  54.     long="MS-DOS 5.x/6.x/Win3.1"
  55.     short=MS-DOS
  56. # 95/98/Me
  57. elif item_in_dir -q windows "$2" &&
  58.      item_in_dir -q win.com $2/$(item_in_dir windows "$2"); then
  59.     long="Windows 95/98/Me"
  60.     short=Windows9xMe
  61. else
  62.     exit 1
  63. fi
  64.  
  65. label=$(count_next_label $short)
  66. result "${partition}:${long}:${label}:chain"
  67. exit 0
  68.